/* eslint-disable camelcase */
import { MessagePlugin } from 'tdesign-vue-next';
import { request } from '@/utils/request';
import { CreateConversationResponse, Conversation } from '@/api/model/cozeModel';

/**
 * 会话信息
 * @returns 会话信息
 */
export const postMessageAPI = async (userMessage: any) => {
  try {
    const response = await fetch('http://120.238.187.216:40019/v1/chat-messages', {
      method: 'POST',
      headers: {
        Authorization: `Bearer ${import.meta.env.VITE_DIFY_API_KEY}`,
        'Content-Type': 'application/json',
      },
      body: JSON.stringify(userMessage),
    });
    if (response.status !== 200) {
      await MessagePlugin.error(`请求失败: ${response.status}`);
    }
    return response.body.getReader();
  } catch (error) {
    console.log('error', error);
    if (error.name === 'AbortError') {
      throw new Error('API 请求超时');
    } else {
      throw error;
    }
  }
};

// 发起会话信息
// export const postMessageAPI = async (userMessage: any) => {
//   // 使用 request 封装发起请求
//   try {
//     const response = await request.post({
//       url: '/chat-messages',
//       responseType: 'arraybuffer',
//       data: userMessage,
//     });
//
//     // 处理流式响应
//     // if (response.status !== 200) {
//     //   throw new Error(`API请求失败: ${response.status}`);
//     // }
//
//     // 将 ArrayBuffer 转换为 ReadableStream
//     const stream = new ReadableStream({
//       start(controller) {
//         controller.enqueue(response.data);
//         controller.close();
//       },
//     });
//     return stream.getReader();
//   } catch (error) {
//     throw new Error(`请求失败: ${error}`);
//   }
// };

/**
 * 创建新会话
 * @returns 会话信息
 */
export const createConversationAPI = async (): Promise<CreateConversationResponse> => {
  try {
    const response = await request.post({
      url: '/v1/conversation/create',
      // 个人访问创建会话参数
      data: {
        bot_id: '7477847870327521290',
        connector_id: '999',
      },
    });
    console.log('res', response);
    const { data } = response.data;
    // 处理业务逻辑错误（code非0）
    // if (code !== 0) {
    //   throw new Error(`[${code}] ${msg || '未知错误'}`);
    // }

    return data;
  } catch (error) {
    // 统一错误处理
    throw new Error(`创建会话失败: ${error.message}`);
  }
};

/**
 * 获取智能体在线配置
 * @returns 智能体完整配置信息
 */
export const getOnlineInfo = async () => {
  try {
    const { data } = await request.get({
      url: '/parameters',
    });
    console.log('res', data);
    // 处理业务逻辑错误（code非0）
    // if (code !== 0) {
    //   throw new Error(`[${code}] ${msg || '未知错误'}`);
    // }

    return data;
  } catch (error) {
    // 统一错误处理
    throw new Error(`获取智能体配置失败: ${error.message}`);
  }
};

export const postFileAPI = async (formData: any) => {
  const response = await fetch('http://120.238.187.216:40019/v1/files/upload', {
    method: 'POST',
    headers: {
      Authorization: `Bearer ${import.meta.env.VITE_DIFY_API_KEY}`, // 上传文件密钥
      'Content-Type': 'application/json',
    },
    body: JSON.stringify(formData),
  });
  if (!response.ok) {
    throw new Error(`API 请求失败: ${response.status}`);
  }
  return response.body.getReader();
};

/**
 * 终止会话响应
 * @returns 终止响应信息
 */
// eslint-disable-next-line consistent-return
export const stopMessageAPI = async (currentUser: any, currenTaskId: any) => {
  const params = {
    user: currentUser,
  };
  try {
    const response = await fetch(`http://120.238.187.216:40019/v1/chat-messages/${currenTaskId}/stop`, {
      method: 'POST',
      headers: {
        Authorization: `Bearer ${import.meta.env.VITE_DIFY_API_KEY}`, // 上传文件密钥
        'Content-Type': 'application/json',
      },
      body: JSON.stringify(params),
    });
    console.log('已停止生成', response);
    return response;
  } catch (error) {
    console.error('停止请求失败:', error);
  }
};

/**
 * 获取历史会话列表
 * @returns 会话列表信息
 */
export const fetchConversations = async (params: {
  user: string;
  last_id?: string | null;
  limit?: number;
  // sort_by?: string;
}): Promise<{
  data: Conversation[];
  has_more: boolean;
  limit: number;
}> => {
  try {
    const response = await request.get({ url: '/conversations', params });
    const { data, has_more, limit } = response.data;
    return { data, has_more, limit };
  } catch (error) {
    // 统一错误处理
    throw new Error(`获取历史会话列表失败: ${error.message}`);
  }
};

/**
 * 获取会话历史消息（滚动加载）
 * 倒序返回历史记录，第一页返回最新 limit 条，后续请求用当前页第一条消息ID作为first_id获取更早记录
 *
 * @param params.conversation_id 会话ID（必填）
 * @param params.user 用户唯一标识（必填）
 * @param params.first_id 当前页第一条消息ID，默认null（第一页）
 * @param params.limit 返回条数，默认20
 * @returns 包含消息列表、分页标识的响应对象
 */
export const fetchMessages = async (params: {
  conversation_id: string | string[];
  user: string;
  first_id?: string | null;
  limit?: number;
}): Promise<{
  data: Array<{
    id: string;
    conversation_id: string;
    inputs: {
      query: string;
      [key: string]: any; // 允许其他输入参数
    };
    message_files: Array<{
      id: string;
      type: 'image';
      url: string;
      belongs_to: 'user' | 'assistant';
    }>;
    answer: string;
    created_at: number;
    feedback?: {
      rating: 'like' | 'dislike';
      [key: string]: any; // 允许其他反馈字段
    };
    retriever_resources?: Array<any>; // 根据实际RetrieverResource类型定义
  }>;
  has_more: boolean;
  limit: number;
}> => {
  try {
    // 处理默认参数
    const requestParams = {
      limit: 20, // 默认值
      ...params,
      first_id: params.first_id ?? null, // 确保未传值时设为null
    };

    const response = await request.get({
      url: '/messages',
      params: requestParams,
    });

    // 解构响应数据（根据实际接口响应结构调整）
    const { data, has_more, limit } = response.data;

    return {
      data: data.map((msg: any) => ({
        ...msg,
        // 可在此处添加必要的数据转换
      })),
      has_more,
      limit
    };
  } catch (error) {
    // 统一错误处理（建议接入监控日志）
    throw new Error(`获取历史消息失败: ${error.message}`);
  }
};
